//
//  CAAnimation.swift
//  Documentation
//
//  Created by Toj on 8/9/23.
//

// https://zhuanlan.zhihu.com/p/476477413

/**
 * 是Core Animation框架中的一个抽象基类, 不可直接使用
 * 提供了动画的基本属性和行为.
 * 属性设置请看: CAMediaTiming
 * 子类:
 * 1. CABasicAnimation: 基础动画
 * 2. CAKeyframeAnimation: 关键帧动画
 * 3. CATransition: 过渡动画
 * 4. CAAnimationGroup: 动画组
 * NOTE: CAAnimation是一个抽象基类, 不能直接使用, 而是通过其子类创建具体的动画对象
 */

import QuartzCore

/** The base animation class. **/

@available(iOS 2.0, *)
open class CAAnimation : NSObject, NSSecureCoding, NSCopying, CAMediaTiming, CAAction {

    
    /* Animations implement the same property model as defined by CALayer.
     * See CALayer.h for more details. */
    
    open class func defaultValue(forKey key: String) -> Any?

    open func shouldArchiveValue(forKey key: String) -> Bool

    
    /// 速度变化: 动画的时间函数, 控制动画在时间轴上的加速和减速效果.
    /// 常见的时间函数有线性、缓入缓出、弹簧效果等. CAMediaTimingFunction
    open var timingFunction: CAMediaTimingFunction? = nil

    /// 动画代理
    open var delegate: CAAnimationDelegate?

    
    /// 用于确定动画执行完成后是否从图层中移除
    open var isRemovedOnCompletion: Bool

    
  /**
   * CAAnimation类本身没有名为preferredFrameRateRange的属性.
   * CAAnimation是Core Animation框架中用于定义动画操作的基类,
   * 主要关注的是动画的属性、时长、时间函数等方面，并不涉及到屏幕的帧率范围.
   * 屏幕的首选帧率范围可以通过UIScreen.main.preferredFrameRateRange属性获得,
   *   这是UIScreen类的一个属性，用于提供屏幕的帧率信息.
   *   该属性返回一个frameRateRange对象, 其中包含了屏幕支持的最低和最高首选帧率的信息.
   * 如果你希望根据屏幕的首选帧率范围来调整或优化动画的性能,
   * 可以通过访问preferredFrameRateRange属性来获取帧率信息，并相应地调整你的动画执行逻辑。
   */
    @available(iOS 15.0, *)
    open var preferredFrameRateRange: CAFrameRateRange
}
